Code coverage report for src/index.js

Statements: 87.18% (68 / 78)      Branches: 93.75% (15 / 16)      Functions: 78.26% (18 / 23)      Lines: 88.16% (67 / 76)      Ignored: none     

All files » src/ » index.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 1471     1   1   1   32   1 16 16   2       1                                   1       1   12     1   1 1 10   10 10     1 6   6 5 5         1     1 1 22   22 22     1 17   17 12 12 11 11   11 11 11         5 5   5 6         1 31   31 21   21   21 8 8 7       10 10   10   10 4 4 3           1 9 2 2   9     1     1        
System.register(['aurelia-logging'], function (_export) {
  'use strict';
 
  var LogManager, logger, Handler, EventAggregator;
 
  _export('includeEventsIn', includeEventsIn);
 
  _export('configure', configure);
 
  function _classCallCheck(instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
 
  function executeHandler(handler) {
    try {
      handler();
    } catch (e) {
      logger.error(e);
    }
  }
 
  function includeEventsIn(obj) {
    var ea = new EventAggregator();
 
    obj.subscribeOnce = function (event, callback) {
      return ea.subscribeOnce(event, callback);
    };
 
    obj.subscribe = function (event, callback) {
      return ea.subscribe(event, callback);
    };
 
    obj.publish = function (event, data) {
      ea.publish(event, data);
    };
 
    return ea;
  }
 
  function configure(aurelia) {
    aurelia.withInstance(EventAggregator, includeEventsIn(aurelia));
  }
 
  return {
    setters: [function (_aureliaLogging) {
      LogManager = _aureliaLogging;
    }],
    execute: function () {
      logger = LogManager.getLogger('event-aggregator');
 
      Handler = (function () {
        function Handler(messageType, callback) {
          _classCallCheck(this, Handler);
 
          this.messageType = messageType;
          this.callback = callback;
        }
 
        Handler.prototype.handle = function handle(message) {
          var _this = this;
 
          if (message instanceof this.messageType) {
            executeHandler(function () {
              return _this.callback.call(null, message);
            });
          }
        };
 
        return Handler;
      })();
 
      EventAggregator = (function () {
        function EventAggregator() {
          _classCallCheck(this, EventAggregator);
 
          this.eventLookup = {};
          this.messageHandlers = [];
        }
 
        EventAggregator.prototype.publish = function publish(event, data) {
          var subscribers, i;
 
          if (typeof event === 'string') {
            subscribers = this.eventLookup[event];
            if (subscribers) {
              subscribers = subscribers.slice();
              i = subscribers.length;
 
              while (i--) {
                executeHandler(function () {
                  return subscribers[i](data, event);
                });
              }
            }
          } else {
            subscribers = this.messageHandlers.slice();
            i = subscribers.length;
 
            while (i--) {
              subscribers[i].handle(event);
            }
          }
        };
 
        EventAggregator.prototype.subscribe = function subscribe(event, callback) {
          var subscribers, handler;
 
          if (typeof event === 'string') {
            subscribers = this.eventLookup[event] || (this.eventLookup[event] = []);
 
            subscribers.push(callback);
 
            return function () {
              var idx = subscribers.indexOf(callback);
              if (idx != -1) {
                subscribers.splice(idx, 1);
              }
            };
          } else {
            handler = new Handler(event, callback);
            subscribers = this.messageHandlers;
 
            subscribers.push(handler);
 
            return function () {
              var idx = subscribers.indexOf(handler);
              if (idx != -1) {
                subscribers.splice(idx, 1);
              }
            };
          }
        };
 
        EventAggregator.prototype.subscribeOnce = function subscribeOnce(event, callback) {
          var sub = this.subscribe(event, function (data, event) {
            sub();
            return callback(data, event);
          });
          return sub;
        };
 
        return EventAggregator;
      })();
 
      _export('EventAggregator', EventAggregator);
    }
  };
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL2V2ZW50LWFnZ3JlZ2F0b3Ivc3JjL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztrQkFFTSxNQUFNLEVBRU4sT0FBTyxFQXFCQSxlQUFlOzs2QkFtRVosZUFBZTs7dUJBa0JmLFNBQVM7Ozs7QUE3RnpCLFdBQVMsY0FBYyxDQUFDLE9BQU8sRUFBRTtBQUMvQixRQUFJO0FBQ0YsYUFBTyxFQUFFLENBQUM7S0FDWCxDQUFDLE9BQU0sQ0FBQyxFQUFFO0FBQ1QsWUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNqQjtHQUNGOztBQXFFTSxXQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUM7QUFDbEMsUUFBSSxFQUFFLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQzs7QUFFL0IsT0FBRyxDQUFDLGFBQWEsR0FBRyxVQUFTLEtBQUssRUFBRSxRQUFRLEVBQUM7QUFDM0MsYUFBTyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztLQUMxQyxDQUFDOztBQUVGLE9BQUcsQ0FBQyxTQUFTLEdBQUcsVUFBUyxLQUFLLEVBQUUsUUFBUSxFQUFDO0FBQ3ZDLGFBQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDdEMsQ0FBQzs7QUFFRixPQUFHLENBQUMsT0FBTyxHQUFHLFVBQVMsS0FBSyxFQUFFLElBQUksRUFBQztBQUNqQyxRQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztLQUN6QixDQUFDOztBQUVGLFdBQU8sRUFBRSxDQUFDO0dBQ1g7O0FBRU0sV0FBUyxTQUFTLENBQUMsT0FBTyxFQUFDO0FBQ2hDLFdBQU8sQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0dB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LENBQUMsQ0FBQyxFQUFFO0FBQ2IsMkJBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2VBQzVCO2FBQ0YsQ0FBQztXQUNIO1NBQ0Y7O0FBeERVLHVCQUFlLFdBMEQxQixhQUFhLEdBQUEsdUJBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQztBQUM1QixjQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBQyxVQUFTLElBQUksRUFBQyxLQUFLLEVBQUM7QUFDakQsZUFBRyxFQUFFLENBQUM7QUFDTixtQkFBTyxRQUFRLENBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxDQUFDO1dBQzdCLENBQUMsQ0FBQztBQUNILGlCQUFPLEdBQUcsQ0FBQztTQUNaOztlQWhFVSxlQUFlOzs7aUNBQWYsZUFBZSIsImZpbGUiOiIvVXNlcnMvRWlzZW5iZXJnRWZmZWN0L0RvY3VtZW50cy9HaXRIdWIvVGhlIER1cmFuZGFsIFByb2plY3QvYXVyZWxpYS9ldmVudC1hZ2dyZWdhdG9yL3NyYy9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIExvZ01hbmFnZXIgZnJvbSAnYXVyZWxpYS1sb2dnaW5nJztcblxuY29uc3QgbG9nZ2VyID0gTG9nTWFuYWdlci5nZXRMb2dnZXIoJ2V2ZW50LWFnZ3JlZ2F0b3InKTtcblxuY2xhc3MgSGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2VUeXBlLCBjYWxsYmFjayl7XG4gICAgdGhpcy5tZXNzYWdlVHlwZSA9IG1lc3NhZ2VUeXBlO1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfVxuXG4gIGhhbmRsZShtZXNzYWdlKXtcbiAgICBpZihtZXNzYWdlIGluc3RhbmNlb2YgdGhpcy5tZXNzYWdlVHlwZSl7XG4gICAgICBleGVjdXRlSGFuZGxlcigoKSA9PiB0aGlzLmNhbGxiYWNrLmNhbGwobnVsbCwgbWVzc2FnZSkpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBleGVjdXRlSGFuZGxlcihoYW5kbGVyKSB7XG4gIHRyeSB7XG4gICAgaGFuZGxlcigpO1xuICB9IGNhdGNoKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50QWdncmVnYXRvciB7XG4gIGNvbnN0cnVjdG9yKCl7XG4gICAgdGhpcy5ldmVudExvb2t1cCA9IHt9O1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXJzID0gW107XG4gIH1cblxuICBwdWJsaXNoKGV2ZW50LCBkYXRhKXtcbiAgICB2YXIgc3Vic2NyaWJlcnMsIGk7XG5cbiAgICBpZih0eXBlb2YgZXZlbnQgPT09ICdzdHJpbmcnKXtcbiAgICAgIHN1YnNjcmliZXJzID0gdGhpcy5ldmVudExvb2t1cFtldmVudF07XG4gICAgICBpZihzdWJzY3JpYmVycyl7XG4gICAgICAgIHN1YnNjcmliZXJzID0gc3Vic2NyaWJlcnMuc2xpY2UoKTtcbiAgICAgICAgaSA9IHN1YnNjcmliZXJzLmxlbmd0aDtcblxuICAgICAgICB3aGlsZShpLS0pIHtcbiAgICAgICAgICBleGVjdXRlSGFuZGxlcigoKSA9PiBzdWJzY3JpYmVyc1tpXShkYXRhLCBldmVudCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfWVsc2V7XG4gICAgICBzdWJzY3JpYmVycyA9IHRoaXMubWVzc2FnZUhhbmRsZXJzLnNsaWNlKCk7XG4gICAgICBpID0gc3Vic2NyaWJlcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZShpLS0pIHtcbiAgICAgICAgc3Vic2NyaWJlcnNbaV0uaGFuZGxlKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmUoZXZlbnQsIGNhbGxiYWNrKXtcbiAgICB2YXIgc3Vic2NyaWJlcnMsIGhhbmRsZXI7XG5cbiAgICBpZih0eXBlb2YgZXZlbnQgPT09ICdzdHJpbmcnKXtcbiAgICAgIHN1YnNjcmliZXJzID0gdGhpcy5ldmVudExvb2t1cFtldmVudF0gfHwgKHRoaXMuZXZlbnRMb29rdXBbZXZlbnRdID0gW10pO1xuXG4gICAgICBzdWJzY3JpYmVycy5wdXNoKGNhbGxiYWNrKTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBpZHggPSBzdWJzY3JpYmVycy5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKGlkeCAhPSAtMSkge1xuICAgICAgICAgIHN1YnNjcmliZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1lbHNle1xuICAgICAgaGFuZGxlciA9IG5ldyBIYW5kbGVyKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICBzdWJzY3JpYmVycyA9IHRoaXMubWVzc2FnZUhhbmRsZXJzO1xuXG4gICAgICBzdWJzY3JpYmVycy5wdXNoKGhhbmRsZXIpO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIGlkeCA9IHN1YnNjcmliZXJzLmluZGV4T2YoaGFuZGxlcik7XG4gICAgICAgIGlmIChpZHggIT0gLTEpIHtcbiAgICAgICAgICBzdWJzY3JpYmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVPbmNlKGV2ZW50LCBjYWxsYmFjayl7XG4gICAgdmFyIHN1YiA9IHRoaXMuc3Vic2NyaWJlKGV2ZW50LGZ1bmN0aW9uKGRhdGEsZXZlbnQpe1xuICAgICAgc3ViKCk7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZGF0YSxldmVudCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN1YjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZUV2ZW50c0luKG9iail7XG4gIHZhciBlYSA9IG5ldyBFdmVudEFnZ3JlZ2F0b3IoKTtcblxuICBvYmouc3Vic2NyaWJlT25jZSA9IGZ1bmN0aW9uKGV2ZW50LCBjYWxsYmFjayl7XG4gICAgcmV0dXJuIGVhLnN1YnNjcmliZU9uY2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgfTtcblxuICBvYmouc3Vic2NyaWJlID0gZnVuY3Rpb24oZXZlbnQsIGNhbGxiYWNrKXtcbiAgICByZXR1cm4gZWEuc3Vic2NyaWJlKGV2ZW50LCBjYWxsYmFjayk7XG4gIH07XG5cbiAgb2JqLnB1Ymxpc2ggPSBmdW5jdGlvbihldmVudCwgZGF0YSl7XG4gICAgZWEucHVibGlzaChldmVudCwgZGF0YSk7XG4gIH07XG5cbiAgcmV0dXJuIGVhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlKGF1cmVsaWEpe1xuICBhdXJlbGlhLndpdGhJbnN0YW5jZShFdmVudEFnZ3JlZ2F0b3IsIGluY2x1ZGVFdmVudHNJbihhdXJlbGlhKSk7XG59XG4iXX0=